//
//  BaseCellFactory.swift
//  Exchange
//
//  Created by 孟祥群 on 2018/4/18.
//  Copyright © 2018年 common. All rights reserved.
//

import UIKit
enum TableViewCellStyle: String {
    case BaseStyleCell = "BaseCell"
    case NationalStyleCell = "NationalInforCell" //国家地区
    case SecurityStyleCell = "SecurityCell" //安全信息通用
    case CommonTableStyleCell = "CommonTableViewCell" //通用输入信息
    case SelectPhotoCell = "SelectPhotoCell" //选择证件图片
    case OpenTimeTableViewCell = "OpenTimeTableViewCell" //选择时间
    case DiskDataTableViewCell = "DiskDataTableViewCell"//盘口 金额 数量
    case EntrustTableViewCell = "EntrustTableViewCell" //委托
    case AdvertisingListCell = "AdvertisingListCell"
    case AssetTableViewCell = "AssetTableViewCell" //资金
    case WritePasteTableViewCell = "WritePasteTableViewCell" //地址输入 长按
    case WriteChangeTableViewCell = "WriteChangeTableViewCell" //交换输入的cell
    case LeverOrderCell = "LeverOrderCell" //持仓
}
class BaseCellFactory: NSObject {
    class func createTableViewCellWithModel(model:BaseModel,tableView:UITableView ,style:TableViewCellStyle) -> BaseTableViewCell {
    let cellName = style.rawValue
    
    var cell = tableView.dequeueReusableCell(withIdentifier: cellName)
    if cell == nil {
        // 在swift中使用枚举: 1> 枚举类型.具体的类型 2> .具体的类型
        switch cellName {
        case TableViewCellStyle.BaseStyleCell.rawValue:
            cell = BaseTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.NationalStyleCell.rawValue:
            cell = NationalInforTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.SecurityStyleCell.rawValue:
            cell = SecurityCenterCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.CommonTableStyleCell.rawValue:
            cell = CommonTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.SelectPhotoCell.rawValue:
            cell = SelectPhotoCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.OpenTimeTableViewCell.rawValue:
            cell = OpenTimeTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.DiskDataTableViewCell.rawValue:
            cell = DiskDataTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.EntrustTableViewCell.rawValue:
            cell = EntrustTableViewCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.AdvertisingListCell.rawValue:
            cell = AdvertisingListCell(style: .default, reuseIdentifier: cellName)
            break
        case TableViewCellStyle.AssetTableViewCell.rawValue:
            cell = AssetTableViewCell(style: .default, reuseIdentifier: cellName)
        case TableViewCellStyle.WritePasteTableViewCell.rawValue:
            cell = WritePasteTableViewCell(style: .default, reuseIdentifier: cellName)
        case TableViewCellStyle.WriteChangeTableViewCell.rawValue:
            cell = WriteChangeTableViewCell(style: .default, reuseIdentifier: cellName)
        case TableViewCellStyle.LeverOrderCell.rawValue:
            cell = LeverOrderCell(style: .default, reuseIdentifier: cellName)
        default: break
            
        }
    }
    
    let newCell:BaseTableViewCell = (cell as? BaseTableViewCell)!
    newCell.setModel(model: model)
    return newCell
    }
    
}
